//题目:
// 「外观数列」是一个数位字符串序列，由递归公式定义：
// countAndSay(1) = "1"
// countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。
// 行程长度编码（RLE）是一种字符串压缩方法，其工作原理是通过将连续相同字符（重复两次或更多次）
// 替换为字符重复次数（运行长度）和字符的串联。例如，要压缩字符串 "3322251" ，我们将 "33" 用 "23" 替换，
// 将 "222" 用 "32" 替换，将 "5" 用 "15" 替换并将 "1" 用 "11" 替换。因此压缩后字符串变为 "23321511"。
// 给定一个整数 n ，返回 外观数列 的第 n 个元素。
#include<iostream>
#include<queue>
#include<unordered_map>
#include<limits.h>
#include<algorithm>

using namespace std;
//代码
class Solution 
{
public:
    string countAndSay(int n) 
    {
        //x个y  x是数出来的，y是给出来的
        int count=1;
        string origin="1",ret;
        while(count<n)
        {
            ret="";
            int len=origin.size();
            for(int i=0;i<len;)
            {
                int x=1;//x个相等的数
                while(i+1<len && origin[i]==origin[i+1])
                    x++,i++;
                //x个origin[i]
                ret+=to_string(x);
                ret+=origin[i];
                
                i++;
            }
            count++;
            origin=ret;
            cout<<origin<<endl;
        }

        return n==1?"1":ret;
    }
};